package mx.itesm.goyostacoadventure;

import org.andengine.entity.IEntity;
import org.andengine.entity.modifier.MoveModifier;
import org.andengine.entity.sprite.AnimatedSprite;
import org.andengine.entity.sprite.Sprite;
import org.andengine.opengl.texture.region.TiledTextureRegion;

import java.util.ArrayList;

/**
 * Created by OscarG on 20/04/15.
 */
public class Perro2 {

    double factorVelocidad = 0;
    private AnimatedSprite perro2Der;
    private AnimatedSprite perro2Izq;
    private AnimatedSprite perro2Up;
    private AnimatedSprite perro2Down;
    private AnimatedSprite perro2Der2;
    private AnimatedSprite perro2Izq2;
    private AnimatedSprite perro2Up2;
    private AnimatedSprite perro2Down2;
    private AnimatedSprite perro2Der3;
    private AnimatedSprite perro2Izq3;
    private AnimatedSprite perro2Up3;
    private AnimatedSprite perro2Down3;
    private AnimatedSprite perro2;
    int tipoPerro = 0;

    private AnimatedSprite donGoyo;


    public Perro2(AnimatedSprite donGoyo, AdministradorRecursos admRecursos) {
        float xa = (float)(Math.random() * (1900 - (-1100) + 1) + (-1100)); //(max - min + 1) + min
        float ya = (float)(Math.random() * (1100 - (-600) + 1) + (-600)); //(max - min + 1) + min

        this.donGoyo = donGoyo;
        //tipoPerro = (int) ((Math.random() * 1) +1);
        tipoPerro = (int) (Math.random() * (3 - 1 + 1) + 1); //(max - min + 1) + min
        factorVelocidad = ((Math.random() * 2) + 3);


        if (tipoPerro == 1){
            //Tipo de perro 1
            TiledTextureRegion regionPerro2Der = admRecursos.regionPerro2Der;
            perro2Der = new AnimatedSprite(xa, ya,
                    regionPerro2Der, admRecursos.vbom);
            perro2Der.animate(80);

            TiledTextureRegion regionPerro2Izq = admRecursos.regionPerro2Izq;
            perro2Izq = new AnimatedSprite(xa, ya,
                    regionPerro2Izq, admRecursos.vbom);
            perro2Izq.animate(80);

            TiledTextureRegion regionPerro2Down = admRecursos.regionPerro2Down;
            perro2Down = new AnimatedSprite(xa, ya,
                    regionPerro2Down, admRecursos.vbom);
            perro2Down.animate(80);

            TiledTextureRegion regionPerro2Up = admRecursos.regionPerro2Up;
            perro2Up = new AnimatedSprite(xa, ya,
                    regionPerro2Up, admRecursos.vbom);
            perro2Up.animate(80);

            perro2 = perro2Der;
        }

        if (tipoPerro == 2){
            //Tipo de perro 2
            TiledTextureRegion regionPerro2Der2 = admRecursos.regionPerro2Der2;
            perro2Der2 = new AnimatedSprite(xa, ya,
                    regionPerro2Der2, admRecursos.vbom);
            perro2Der2.animate(80);

            TiledTextureRegion regionPerro2Izq2 = admRecursos.regionPerro2Izq2;
            perro2Izq2 = new AnimatedSprite(xa, ya,
                    regionPerro2Izq2, admRecursos.vbom);
            perro2Izq2.animate(80);

            TiledTextureRegion regionPerro2Down2 = admRecursos.regionPerro2Down2;
            perro2Down2 = new AnimatedSprite(xa, ya,
                    regionPerro2Down2, admRecursos.vbom);
            perro2Down2.animate(80);

            TiledTextureRegion regionPerro2Up2 = admRecursos.regionPerro2Up2;
            perro2Up2 = new AnimatedSprite(xa, ya,
                    regionPerro2Up2, admRecursos.vbom);
            perro2Up2.animate(80);

            perro2 = perro2Der2;

        }

        if (tipoPerro == 3){
            //Tipo de perro 3
            TiledTextureRegion regionPerro2Der3 = admRecursos.regionPerro2Der3;
            perro2Der3 = new AnimatedSprite(xa, ya,
                    regionPerro2Der3, admRecursos.vbom);
            perro2Der3.animate(80);

            TiledTextureRegion regionPerro2Izq3 = admRecursos.regionPerro2Izq3;
            perro2Izq3 = new AnimatedSprite(xa, ya,
                    regionPerro2Izq3, admRecursos.vbom);
            perro2Izq3.animate(80);

            TiledTextureRegion regionPerro2Down3 = admRecursos.regionPerro2Down3;
            perro2Down3 = new AnimatedSprite(xa, ya,
                    regionPerro2Down3, admRecursos.vbom);
            perro2Down3.animate(80);

            TiledTextureRegion regionPerro2Up2 = admRecursos.regionPerro2Up3;
            perro2Up3 = new AnimatedSprite(xa, ya,
                    regionPerro2Up2, admRecursos.vbom);
            perro2Up3.animate(80);

            perro2 = perro2Der3;

        }

    }

    public void perseguirDonGoyo2(EscenaJuego escenaJuego, ArrayList<Perro2> lista, AnimatedSprite donG) {
        AnimatedSprite donGoyo = donG;
        float dx = donGoyo.getX() - perro2.getX();
        float dy = donGoyo.getY() - perro2.getY();
        float length = (float) Math.sqrt(dx * dx + dy * dy);
        float accelerationX = dx / length;
        float accelerationY = dy / length;
        perro2.setX((float) ((accelerationX * factorVelocidad) + perro2.getX())); // entre 3 y 5
        perro2.setY((float) ((accelerationY * factorVelocidad) + perro2.getY())); //

        if (tipoPerro == 1) {
            if (dx > 0 && dy > 0 && dy < dx && perro2 != perro2Der) {
                perro2Der.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Der;
                escenaJuego.attachChild(perro2);
            }

            if (dx > 0 && dy < 0 && dy > (-dx) && perro2 != perro2Der) {
                perro2Der.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Der;
                escenaJuego.attachChild(perro2);
            }

            if (dx < 0 && dy > 0 && dy > (-dx) && perro2 != perro2Up) {
                perro2Up.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Up;
                escenaJuego.attachChild(perro2);
            }

            if (dx > 0 && dy > 0 && dy > dx && perro2 != perro2Up) {
                perro2Up.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Up;
                escenaJuego.attachChild(perro2);
            }

            if (dy > 0 && dx < 0 && dy < (-dx) && perro2 != perro2Izq) {
                perro2Izq.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Izq;
                escenaJuego.attachChild(perro2);
            }

            if (dy < 0 && dx < 0 && dy > dx && perro2 != perro2Izq) {
                perro2Izq.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Izq;
                escenaJuego.attachChild(perro2);
            }

            if (dy < 0 && dx < 0 && dy < dx && perro2 != perro2Down) {
                perro2Down.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Down;
                escenaJuego.attachChild(perro2);
            }

            if (dx > 0 && dy < 0 && dy < (-dx) && perro2 != perro2Down) {
                perro2Down.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Down;
                escenaJuego.attachChild(perro2);
            }
        }
        if (tipoPerro == 2){
            if (dx > 0 && dy > 0 && dy < dx && perro2 != perro2Der2) {
                perro2Der2.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Der2;
                escenaJuego.attachChild(perro2);
            }

            if (dx > 0 && dy < 0 && dy > (-dx) && perro2 != perro2Der2) {
                perro2Der2.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Der2;
                escenaJuego.attachChild(perro2);
            }

            if (dx < 0 && dy > 0 && dy > (-dx) && perro2 != perro2Up2) {
                perro2Up2.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Up2;
                escenaJuego.attachChild(perro2);
            }

            if (dx > 0 && dy > 0 && dy > dx && perro2 != perro2Up2) {
                perro2Up2.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Up2;
                escenaJuego.attachChild(perro2);
            }

            if (dy > 0 && dx < 0 && dy < (-dx) && perro2 != perro2Izq2) {
                perro2Izq2.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Izq2;
                escenaJuego.attachChild(perro2);
            }

            if (dy < 0 && dx < 0 && dy > dx && perro2 != perro2Izq2) {
                perro2Izq2.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Izq2;
                escenaJuego.attachChild(perro2);
            }

            if (dy < 0 && dx < 0 && dy < dx && perro2 != perro2Down2) {
                perro2Down2.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Down2;
                escenaJuego.attachChild(perro2);
            }

            if (dx > 0 && dy < 0 && dy < (-dx) && perro2 != perro2Down2) {
                perro2Down2.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Down2;
                escenaJuego.attachChild(perro2);
            }
        }

        if (tipoPerro == 3) {
            if (dx > 0 && dy > 0 && dy < dx && perro2 != perro2Der3) {
                perro2Der3.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Der3;
                escenaJuego.attachChild(perro2);
            }

            if (dx > 0 && dy < 0 && dy > (-dx) && perro2 != perro2Der3) {
                perro2Der3.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Der3;
                escenaJuego.attachChild(perro2);
            }

            if (dx < 0 && dy > 0 && dy > (-dx) && perro2 != perro2Up3) {
                perro2Up3.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Up3;
                escenaJuego.attachChild(perro2);
            }

            if (dx > 0 && dy > 0 && dy > dx && perro2 != perro2Up3) {
                perro2Up3.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Up3;
                escenaJuego.attachChild(perro2);
            }

            if (dy > 0 && dx < 0 && dy < (-dx) && perro2 != perro2Izq3) {
                perro2Izq3.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Izq3;
                escenaJuego.attachChild(perro2);
            }

            if (dy < 0 && dx < 0 && dy > dx && perro2 != perro2Izq3) {
                perro2Izq3.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Izq3;
                escenaJuego.attachChild(perro2);
            }

            if (dy < 0 && dx < 0 && dy < dx && perro2 != perro2Down3) {
                perro2Down3.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Down3;
                escenaJuego.attachChild(perro2);
            }

            if (dx > 0 && dy < 0 && dy < (-dx) && perro2 != perro2Down3) {
                perro2Down3.setPosition(perro2);
                perro2.detachSelf();
                perro2 = perro2Down3;
                escenaJuego.attachChild(perro2);
            }
        }

        /*if (perro3.collidesWith(donGoyo) ) {
            perro3.detachSelf();
            lista.remove(this);

        }*/

        /*if (perro2.getX() >= donGoyo.getX()-donGoyo.getWidth()/2 && perro2.getX() <= donGoyo.getX()+donGoyo.getWidth()/2){
            if (perro2.getY() >= donGoyo.getY()-donGoyo.getHeight()/2 && perro2.getY() <= donGoyo.getY()+donGoyo.getHeight()/2) {
                perro2.detachSelf();
                return true;

            }

        }*/
    }

    public boolean atrapaDonGoyo(ArrayList<Perro2> lista, AnimatedSprite donG){
        AnimatedSprite donGoyo = donG;
        if (tipoPerro == 1) {
            if (perro2.getX() >= donGoyo.getX() - donGoyo.getWidth() / 2 && perro2.getX() <= donGoyo.getX() + donGoyo.getWidth() / 2) {
                if (perro2.getY() >= donGoyo.getY() - donGoyo.getHeight() / 2 && perro2.getY() <= donGoyo.getY() + donGoyo.getHeight() / 2) {
                    MoveModifier modP3 = new MoveModifier(3, perro2.getX(), perro2.getY(), perro2.getX() + 500, perro2.getY() + 500) {
                        @Override
                        protected void onModifierFinished(IEntity pItem) {
                            super.onModifierFinished(pItem);

                        }
                    };
                    perro2.registerEntityModifier(modP3);
                    return true;

                }

            }
        }
        if (tipoPerro == 2) {
            if (perro2.getX() >= donGoyo.getX() - donGoyo.getWidth() / 2 && perro2.getX() <= donGoyo.getX() + donGoyo.getWidth() / 2) {
                if (perro2.getY() >= donGoyo.getY() - donGoyo.getHeight() / 2 && perro2.getY() <= donGoyo.getY() + donGoyo.getHeight() / 2) {
                    MoveModifier modP3 = new MoveModifier(3, perro2.getX(), perro2.getY(), perro2.getX() - 500, perro2.getY() - 500) {
                        @Override
                        protected void onModifierFinished(IEntity pItem) {
                            super.onModifierFinished(pItem);

                        }
                    };
                    perro2.registerEntityModifier(modP3);
                    return true;

                }

            }
        }
        if (tipoPerro == 3) {
            if (perro2.getX() >= donGoyo.getX() - donGoyo.getWidth() / 2 && perro2.getX() <= donGoyo.getX() + donGoyo.getWidth() / 2) {
                if (perro2.getY() >= donGoyo.getY() - donGoyo.getHeight() / 2 && perro2.getY() <= donGoyo.getY() + donGoyo.getHeight() / 2) {
                    MoveModifier modP3 = new MoveModifier(3, perro2.getX(), perro2.getY(), perro2.getX() - 500, perro2.getY() - 500) {
                        @Override
                        protected void onModifierFinished(IEntity pItem) {
                            super.onModifierFinished(pItem);

                        }
                    };
                    perro2.registerEntityModifier(modP3);
                    return true;

                }

            }
        }
        return false;
    }

    public boolean chocaConChile2(ArrayList<Perro2> lista, Sprite chile){

        /*if (chile.collidesWith(perro2)){
            perro2.detachSelf();
            return true;
        }*/

        /*if (chile.getX() >= perro3.getX()-perro3.getWidth()/2 && chile.getX() <= perro3.getX()+perro3.getWidth()/2){
            if (chile.getY() >= perro3.getY()-perro3.getHeight()/2 && chile.getY() <= perro3.getY()+perro3.getHeight()/2){
                perro3.detachSelf();
                return true;
            }
        }*/
        return false;
    }

    public AnimatedSprite getPerro2() {
        return perro2;
    }

}
